<?php 
/**
 * 商品属性表模型
 */
class GoodsAttrModel extends Model{
	public $table = 'goods_attr';
	/**
	 * 添加数据
	 */
	public function add_ga_data($gid){
		// p(Q('post.',array()));die;
		$a_data = Q('post.attr',array());
		if ($a_data) {
			// 循环属性值，依次添加
			foreach ($a_data as $k => $a) {
				$data = array( 
					'gavalue'=>$a,
					'goods_gid'=>$gid, 
					'type_attr_taid'=>intval($k)
					);
				$this->add($data);
			}
		}
		// 处理可选规格添加
		$spec_data = isset($_POST['spec'])?$_POST['spec']:'';
		// p($spec_data);die;
		if ($spec_data) {
			// 循环规格数组
			foreach ($spec_data as $k => $s) {
				// p($s);die;
				for ($i=0; $i < count($s['tavalue']); ++$i) { 
					$data = array( 
						'gavalue'=>$s['tavalue'][$i],
						'add_price'=>(int)$s['added'][$i],
						'goods_gid'=>$gid,
						'type_attr_taid'=>intval($k)
					);
					$this->add($data); 

				} 
			}

		}
	}






	/**
	 * 通过商品gid获得商品属性
	 */
 	public function get_attr($gids){
 		// 查询商品属性表根据属性值分组
 		$attr = $this->where("goods_gid IN (" . implode(',',$gids) . ")")->group('gavalue')->all();

 		// 归结同一taid
 		$temp1 = array();
 		foreach ($attr as $k => $v) {
 			$temp1[$v['type_attr_taid']][] = $v;
 		}
 		// 让数组有类型属性名称和所对应的值
 		$temp2 = array();
 		foreach ($temp1 as $taid => $v) {
 			$temp2[] = array(
 				'taname' => K('TypeAttr')->where('taid=' . $taid)->getField('taname'),
 				'value'=>$v
 				);
 		}
 		return $temp2;
 	}
 	/**
 	 * 通过筛选参数，筛选商品ID
 	 */
 	public function filter_gids($param,$gids){
 		$gid = array();
 		foreach ($param as $gaid) {
 			// 如果不是选择'不限'
 			if ($gaid) {
 				// 查找同一属性的不同商品(用自关联)
 				$gid[] = M()->join('__goods_attr__ ga1 JOIN __goods_attr__ ga2 ON ga1.gavalue=ga2.gavalue')->where("ga1.gaid={$gaid}")->getField('ga2.goods_gid',true);
 			}
 		}
 		// 如果没有选不限的时候，取交集(第一和第二个合并，上2个结果再和最后一个取交集)
 		if ($gid) {
 			foreach ($gid as $k => $v) {
 				if ($k == 0) {
 					$temp = $v;
 				}else{
 					$temp = array_intersect($gid[$k], $temp);
 				}
 			}
 			// 筛选出的数组再和分类所获得的gid取交集
 			$gids = array_intersect($temp,$gids);
 		}
 		// 如果全是不限时，返出该分类下所有的gid
 		return $gids;

 	}


}
















 ?>